今天來介紹 CSS 的 Inheritance (繼承) 以及 inherit 這個關鍵字的屬性值。
「重新認識 CSS」這個系列名稱的由來就如其名,我想要重新認識它。雖然以前就有學過 CSS,但這次想從 CSS Spec 中學到最原始的定義和內容,更加了解 CSS 的原理,讓我在切版的時候可以更加確定自己在做什麼,我踩到的雷只是因為我不夠了解它才會炸開。
在這 30 天的內容中,會將 Spec 內看到的資料整理成這個系列,也希望正在學 CSS 的各位可以更加了解它。另外我也會同時將文章發至我的 Blog,如果想直接看文內的程式碼 Demo 畫面,可以到我的 Blog 來看。
本文同步發表於 Titangene Blog:重新認識 CSS - Inheritance (繼承)
「重新認識 CSS」系列文章發文於:
某些值由 document tree 中的元素的 children 繼承。每個屬性都定義了是否繼承。
像下圖是 color 屬性的定義,可以看到在 Inherited 欄位中是定義為可被繼承:

例如:下面範例中,如果沒有在 em 元素設定 color 屬性,就會繼承 h1 元素的 color 屬性:
<h1>The headline <em>is</em> important!</h1>
如果 h1 元素的 color 設為藍色,那 em 元素的 color 也會是藍色:
h1 { color: blue; }
發生繼承時,元素會繼承 computed value。來自父元素的 computed value 會同時成為子元素上的 specified value 和 computed value。
例如以下範例:
h1 元素的 font-size 屬性的 computed value 會是 13px ( 130% x 10px,也就是使用父元素 body 的 font-size 屬性值:10px,乘上 h1 元素的 130% )em 元素繼承了 h1 元素的 font-size 屬性的 computed value,因此 em 元素也會是 13px 的 computed value13px 字體,則 h1 和 em 元素的 font-size 的 actual value 可能會是 12px (例如:瀏覽器預設最小字體為 12px )<body>
<h1>A <em>large</em> heading</h1>
</body>
body { font-size: 10pt; }
h1 { font-size: 130%; }
inherit每個屬性都可以使用 inherit 這個繼承屬性值,只要設定了這個值,該屬性就會將元素的 parent 的 computed value 作為 specified value,也就是說,inherit 這個值是用於強制繼承,也可用於原本在屬性定義表中定義為 Inherited: no 的屬性,讓該屬性變成可繼承的父元素。
如果在 root 元素的屬性上設定了 inherit 值,則會為該屬性設定其 initial value。
例如:
body 元素上設定了 color 和 background 屬性color 屬性設為 inherit,並且 background 屬性設為 transparent (也就是透明背景)body {
color: black !important;
background: white !important;
}
* {
color: inherit !important;
background: transparent !important;
}
如果上面這些規則都是使用者的 style sheet,則會在整個文件中強制使用白底黑字 (因為其他元素的 color 屬性會繼承 body 元素的黑色,而其他元素都被設為透明色的背景)。
資料來源: